/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EnfermedadYDiagnosticoAmbulatorioPresentacion.java
 *
 * Created on 08/11/2010, 14:34:44
 */

package presentacion.enfermedad_y_diagnostico;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.Cie9mc;
import hibernate.objeto.EnfermedadYDiagnosticoAmbulatorio;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.SpinnerDateModel;
import logica.CapaLogica;
import logica.EnfermedadYDiagnosticoAmbulatorioLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.GestionPacientePresentacion;
import presentacion.acceso.RestriccionAcceso;
import presentacion.cie9mc.GestionCie9mcPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;

/**
 *
 * @author Gonzalo
 */
public class EnfermedadYDiagnosticoAmbulatorioPresentacion extends javax.swing.JDialog {

    /** Creates new form EnfermedadYDiagnosticoAmbulatorioPresentacion */
    public EnfermedadYDiagnosticoAmbulatorioPresentacion(java.awt.Frame parent, boolean modal,
            EnfermedadYDiagnosticoAmbulatorio unaEnfermedadYDiagnosticoAmbulatorio) {
        super(parent, modal);

        enfermedadYDiagnosticoAmbulatorio = unaEnfermedadYDiagnosticoAmbulatorio;

        initComponents();
        personalizarGUI();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarEnfermedadYDiagnosticoAmbulatorio(this));

        if (CapaPresentacion.modoCarga) {
            modoCarga();
        } else if (CapaPresentacion.modoModificacion) {
            modoModificacion();
        } else if (CapaPresentacion.modoVisualizacion) {
            modoVisualizacion();
        }
    }
    
    /**
     * Setea la ventana en modo carga.
     *
     */
    private void modoCarga() {
        horaEnfermedadYDiagnostico.getModel().setValue(new Date());
        fechaEnfermedadYDiagnostico.setDate(new Date());
    }

    /**
     * Setea la ventana en modo modificación.
     * 
     */
    private void modoModificacion() {
        exhibirDatosEnPantalla();

        horaEnfermedadYDiagnostico.getModel().setValue(new Date());
        fechaEnfermedadYDiagnostico.setDate(new Date());
    }
    
    /**
     * Setea la ventana en modo visualización.
     * 
     */
    private void modoVisualizacion() {
        setearEstadoCampos(false);
        exhibirDatosEnPantalla();
        botonCancelar.requestFocus();
        CapaPresentacion.personalizarBotonesEnVisualizacion(textoDescriptivoVentana,
                botonAceptar, botonCancelar);
    }

    /**
     * Permite visualizar los detalles de la enfermedad y su diagnóstico.
     *
     */
    private void exhibirDatosEnPantalla() {
        CapaPresentacion.setearLabelEstado(
                enfermedadYDiagnosticoAmbulatorio, textoEstadoEntidad);

        String horaEnString = enfermedadYDiagnosticoAmbulatorio.
                getHoraEnfermedadYDiagnosticoAmbulatorio();
        horaEnfermedadYDiagnostico.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaEnString),
                CapaLogica.separarMinutos(horaEnString),
                CapaLogica.separarSegundos(horaEnString)));
        fechaEnfermedadYDiagnostico.setDate(enfermedadYDiagnosticoAmbulatorio.
                getFechaEnfermedadYDiagnosticoAmbulatorio());
        nombreEnfermedad.setText("(" +
                    enfermedadYDiagnosticoAmbulatorio.getCie9mc().getCodigoCie9mc() + ") " +
                    enfermedadYDiagnosticoAmbulatorio.getCie9mc().getDetalleCie9mc());
        nombreEnfermedad.setToolTipText(nombreEnfermedad.getText());
        cie9mcSeleccionado = enfermedadYDiagnosticoAmbulatorio.getCie9mc();
        diagnostico.setText(
                enfermedadYDiagnosticoAmbulatorio.
                getDiagnosticoEnfermedadYDiagnosticoAmbulatorio());
        diagnostico.setCaretPosition(0);
        informacionComplementariaDiagnostico.setText(
                enfermedadYDiagnosticoAmbulatorio.
                getDescripcionDiagnosticoEnfermedadYDiagnosticoAmbulatorio());
        informacionComplementariaDiagnostico.setCaretPosition(0);
    }

    /**
     * Pone en false la propiedad enabled de todos los campos de ingreso.
     *
     * @param estado El estado a setear
     */
    private void setearEstadoCampos(boolean estado) {
        horaEnfermedadYDiagnostico.setEnabled(estado);
        fechaEnfermedadYDiagnostico.setEnabled(estado);
        botonEnfermedad.setEnabled(estado);
        diagnostico.setEnabled(estado);
        informacionComplementariaDiagnostico.setEnabled(estado);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVentana = new javax.swing.JLabel();
        panelDiagnostico = new javax.swing.JPanel();
        textoHoraYFechaEnfermedadYDiagnostico = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaEnfermedadYDiagnostico = new javax.swing.JSpinner(spinerModel);
        fechaEnfermedadYDiagnostico = new com.toedter.calendar.JDateChooser();
        botonEnfermedad = new javax.swing.JButton();
        nombreEnfermedad = new javax.swing.JLabel();
        textoDiagnostico = new javax.swing.JLabel();
        diagnosticoScrollPanel = new javax.swing.JScrollPane();
        diagnostico = new javax.swing.JTextArea();
        textoInformacionComplementariaDiagnostico = new javax.swing.JLabel();
        informacionComplementariaDiagnosticoScrollPanel = new javax.swing.JScrollPane();
        informacionComplementariaDiagnostico = new javax.swing.JTextArea();
        botonCancelar = new javax.swing.JButton();
        botonAceptar = new javax.swing.JButton();
        textoEstadoEntidad = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Enfermedad y Diagnóstico - Ambulatorio");
        setMinimumSize(new java.awt.Dimension(816, 728));
        setResizable(false);

        textoDescriptivoVentana.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVentana.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVentana.setText("Ingrese la información de la enfermedad");
        textoDescriptivoVentana.setPreferredSize(new java.awt.Dimension(612, 20));

        panelDiagnostico.setMinimumSize(new java.awt.Dimension(0, 0));

        textoHoraYFechaEnfermedadYDiagnostico.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFechaEnfermedadYDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFechaEnfermedadYDiagnostico.setText("Hora y fecha");
        textoHoraYFechaEnfermedadYDiagnostico.setPreferredSize(new java.awt.Dimension(135, 20));

        fechaEnfermedadYDiagnostico.setToolTipText("");
        fechaEnfermedadYDiagnostico.setDate(new Date());
        fechaEnfermedadYDiagnostico.setMaxSelectableDate(new Date());
        fechaEnfermedadYDiagnostico.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaEnfermedadYDiagnostico.setPreferredSize(new java.awt.Dimension(144, 20));

        botonEnfermedad.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonEnfermedad.setForeground(Fuente.COLOR_NORMAL);
        botonEnfermedad.setText("Enfermedad");
        botonEnfermedad.setToolTipText("Seleccione la enfermedad asociada según el estandar Cie9MC");
        botonEnfermedad.setPreferredSize(new java.awt.Dimension(135, 20));
        botonEnfermedad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEnfermedadActionPerformed(evt);
            }
        });

        nombreEnfermedad.setFont(Fuente.FUENTE_LABEL);
        nombreEnfermedad.setForeground(Fuente.COLOR_NORMAL);
        nombreEnfermedad.setPreferredSize(new java.awt.Dimension(620, 20));

        textoDiagnostico.setFont(Fuente.FUENTE_LABEL);
        textoDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        textoDiagnostico.setText("Diagnóstico");
        textoDiagnostico.setPreferredSize(new java.awt.Dimension(230, 20));

        diagnosticoScrollPanel.setPreferredSize(new java.awt.Dimension(760, 227));

        diagnostico.setColumns(2);
        diagnostico.setFont(Fuente.FUENTE_TEXTFIELD);
        diagnostico.setForeground(Fuente.COLOR_NORMAL);
        diagnostico.setLineWrap(true);
        diagnostico.setRows(2);
        diagnostico.setWrapStyleWord(true);
        diagnosticoScrollPanel.setViewportView(diagnostico);

        textoInformacionComplementariaDiagnostico.setFont(Fuente.FUENTE_LABEL);
        textoInformacionComplementariaDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        textoInformacionComplementariaDiagnostico.setText("Información complementaria");
        textoInformacionComplementariaDiagnostico.setPreferredSize(new java.awt.Dimension(230, 20));

        informacionComplementariaDiagnosticoScrollPanel.setPreferredSize(new java.awt.Dimension(760, 227));

        informacionComplementariaDiagnostico.setColumns(2);
        informacionComplementariaDiagnostico.setFont(Fuente.FUENTE_TEXTFIELD);
        informacionComplementariaDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        informacionComplementariaDiagnostico.setLineWrap(true);
        informacionComplementariaDiagnostico.setRows(2);
        informacionComplementariaDiagnostico.setWrapStyleWord(true);
        informacionComplementariaDiagnosticoScrollPanel.setViewportView(informacionComplementariaDiagnostico);

        javax.swing.GroupLayout panelDiagnosticoLayout = new javax.swing.GroupLayout(panelDiagnostico);
        panelDiagnostico.setLayout(panelDiagnosticoLayout);
        panelDiagnosticoLayout.setHorizontalGroup(
            panelDiagnosticoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDiagnosticoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDiagnosticoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(diagnosticoScrollPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 984, Short.MAX_VALUE)
                    .addComponent(informacionComplementariaDiagnosticoScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 984, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelDiagnosticoLayout.createSequentialGroup()
                        .addComponent(botonEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(nombreEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelDiagnosticoLayout.createSequentialGroup()
                        .addComponent(textoHoraYFechaEnfermedadYDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(horaEnfermedadYDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(fechaEnfermedadYDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(textoDiagnostico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoInformacionComplementariaDiagnostico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelDiagnosticoLayout.setVerticalGroup(
            panelDiagnosticoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDiagnosticoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDiagnosticoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(fechaEnfermedadYDiagnostico, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoHoraYFechaEnfermedadYDiagnostico, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(horaEnfermedadYDiagnostico))
                .addGap(18, 18, 18)
                .addGroup(panelDiagnosticoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(botonEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nombreEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(diagnosticoScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 227, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoInformacionComplementariaDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(informacionComplementariaDiagnosticoScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
                .addContainerGap())
        );

        JSpinner.DateEditor horaDeEnfermedad = new JSpinner.DateEditor(horaEnfermedadYDiagnostico, "HH:mm:ss");
        horaEnfermedadYDiagnostico.setEditor(horaDeEnfermedad);

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega la  información de la enfermedad");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        textoEstadoEntidad.setFont(Fuente.FUENTE_TEXTFIELD);
        textoEstadoEntidad.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        textoEstadoEntidad.setPreferredSize(new java.awt.Dimension(150, 20));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(panelDiagnostico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.DEFAULT_SIZE, 836, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addComponent(textoEstadoEntidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoEstadoEntidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelDiagnostico, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_botonCancelarActionPerformed
//GEN-FIRST:event_botonEnfermedadPersonalActionPerformed
//GEN-LAST:event_botonEnfermedadPersonalActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        agregarOModificarEnfermedadYDiagnosticoAmbulatorio();
    }//GEN-LAST:event_botonAceptarActionPerformed

    private void botonEnfermedadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEnfermedadActionPerformed
        cargarCie9mc();
    }//GEN-LAST:event_botonEnfermedadActionPerformed
   
    /**
     * Obtiene una enfermedad del listado de Cie9mc.
     */
    public void cargarCie9mc() {
        if (botonEnfermedad.isEnabled()) {
            RestriccionAcceso.GestionCie9mcPresentacion(null, true, false, false);

            //Completa el campo con la enfermedad seleccionada
            Cie9mc cie9mcSeleccionadoDeTabla =
                    GestionCie9mcPresentacion.getCie9mcSeleccionado();

            //Setea la enfermedad seleccionada
            cie9mcSeleccionado = cie9mcSeleccionadoDeTabla;
            if(cie9mcSeleccionadoDeTabla != null){
                nombreEnfermedad.setText("(" +
                    cie9mcSeleccionadoDeTabla.getCodigoCie9mc() + ") " +
                    cie9mcSeleccionadoDeTabla.getDetalleCie9mc());
            }
            nombreEnfermedad.setToolTipText(nombreEnfermedad.getText());
        }
    }

    /**
     * Agrega/modifica la enfermedad y el diagnóstico del paciente
     *
     * @return true si se agregó correctamente, false en caso contrario
     */
    private void agregarOModificarEnfermedadYDiagnosticoAmbulatorio() {
        //Valida todos los datos ingresados
        if (validarCampos()) {
            if (CapaPresentacion.confirmarModificacion("enfermedad", "la")) {
                //Carga toda la información de la pantalla
                recopilarInformacion();
                int[] idEnfermedadYDiagnosticoAmbulatorio = new int[1];
                if (CapaPresentacion.modoModificacion) {
                    //Modificación de enfermedadYDiagnosticoAmbulatorio
                    idEnfermedadYDiagnosticoAmbulatorio[0] =
                            enfermedadYDiagnosticoAmbulatorio.
                            getIdEnfermedadYDiagnosticoAmbulatorio();
                } else {
                    //Alta de enfermedadYDiagnosticoAmbulatorio
                    idEnfermedadYDiagnosticoAmbulatorio[0] = -1;
                }

                if (EnfermedadYDiagnosticoAmbulatorioLogica.
                        agregarEnfermedadYDiagnosticoAmbulatorio(
                        datosEnfermedadYDiagnosticoAmbulatorio,
                        GestionPacientePresentacion.getPaciente(),
                        enfermedadYDiagnosticoAmbulatorio,
                        idEnfermedadYDiagnosticoAmbulatorio)) {
                    enfermedadYDiagnosticoAmbulatorio =
                            EnfermedadYDiagnosticoAmbulatorioLogica.
                            getEnfermedadYDiagnosticoAmbulatorioPorId(
                            idEnfermedadYDiagnosticoAmbulatorio[0]);
                    dispose();
                }
            }
        } else {
            MensajePresentacion.errorDatosInvalidos();
        }
    }

    /**
     * Valida en conjunto todos los campos. Aquellos que son obligatorios y los
     * que no.
     *
     * @return true si el objeto está listo para cargarse, false en caso
     * contrario
     */
    private boolean validarCampos() {
        boolean esHoraYFechaValida = validarHoraYFecha();
        boolean esEnfermedadValida = validarEnfermedad();
        boolean esDiagnosticoValida = validarDiagnostico();

        return (esHoraYFechaValida && esEnfermedadValida && esDiagnosticoValida);
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarInformacion() {
        datosEnfermedadYDiagnosticoAmbulatorio = new Object[5];

        datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.ENFERMEDAD_Y_DIAGNOSTICO_AMBULATORIO_HORA] =
                CapaLogica.separarTiempo(horaEnfermedadYDiagnostico.
                getValue().toString());

        datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.ENFERMEDAD_Y_DIAGNOSTICO_AMBULATORIO_FECHA] =
                fechaEnfermedadYDiagnostico.getDate();

        datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.ENFERMEDAD_Y_DIAGNOSTICO_AMBULATORIO_CIE9MC] =
                cie9mcSeleccionado;

        datosEnfermedadYDiagnosticoAmbulatorio[CapaLogica.
                ENFERMEDAD_Y_DIAGNOSTICO_AMBULATORIO_DIAGNOSTICO] =
                diagnostico.getText();

        datosEnfermedadYDiagnosticoAmbulatorio[CapaLogica.
                ENFERMEDAD_Y_DIAGNOSTICO_AMBULATORIO_DESCRIPCION_DIAGNOSTICO] =
                informacionComplementariaDiagnostico.getText();
    }

    /**
     * Valida los campos correspondiente a la fecha y hora
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarHoraYFecha() {
        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(
                fechaEnfermedadYDiagnostico.getDate(), "", true)) {
            textoHoraYFechaEnfermedadYDiagnostico.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFechaEnfermedadYDiagnostico.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            return false;
        } else {
            textoHoraYFechaEnfermedadYDiagnostico.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFechaEnfermedadYDiagnostico.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente a la enfermedad
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarEnfermedad() {
        //Manejo de la validación de la enfermedad
        if (!CapaValidacion.validarCampoObligatorio(
                nombreEnfermedad.getText())) {
            botonEnfermedad.setForeground(
                    Fuente.COLOR_ERROR);
            botonEnfermedad.setToolTipText(InformeError.
                    INFORME_ERROR_ENFERMEDAD_AMBULATORIO_NOMBRE_CIE9M_ENFERMEDAD_SELECCION_BOTON);
            return false;
        } else {
            botonEnfermedad.setForeground(
                    Fuente.COLOR_NORMAL);
            botonEnfermedad.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente al diagnóstico
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarDiagnostico() {
        //Manejo de la validación del diagnóstico
        if (!CapaValidacion.validarCampoObligatorio(
                diagnostico.getText())) {
            textoDiagnostico.setForeground(
                    Fuente.COLOR_ERROR);
            textoDiagnostico.setToolTipText(InformeError.
                    INFORME_ERROR_ENFERMEDAD_AMBULATORIO_DIAGNOSTICO);
            return false;
        } else {
            textoDiagnostico.setForeground(
                    Fuente.COLOR_NORMAL);
            textoDiagnostico.setToolTipText(null);
            return true;
        }
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    agregarOModificarEnfermedadYDiagnosticoAmbulatorio();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventosr
        ((DefaultEditor) horaEnfermedadYDiagnostico.getEditor()).
                getTextField().addKeyListener(keyListenerEnter);
        ((DefaultEditor) horaEnfermedadYDiagnostico.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaEnfermedadYDiagnostico.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEnter);
        ((IDateEditor) fechaEnfermedadYDiagnostico.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);
        
        diagnostico.addKeyListener(keyListenerEscape);
        informacionComplementariaDiagnostico.addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
        botonEnfermedad.addKeyListener(keyListenerEscape);
    }

    /**
     * Retorna la enfermedad agregada.
     *
     * @return El objeto EnfermedadYDiagnosticoAmbulatorio agregado
     */
    public static EnfermedadYDiagnosticoAmbulatorio getEnfermedadYDiagnostico() {
        return enfermedadYDiagnosticoAmbulatorio;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonEnfermedad;
    private javax.swing.JTextArea diagnostico;
    private javax.swing.JScrollPane diagnosticoScrollPanel;
    private com.toedter.calendar.JDateChooser fechaEnfermedadYDiagnostico;
    private javax.swing.JSpinner horaEnfermedadYDiagnostico;
    private javax.swing.JTextArea informacionComplementariaDiagnostico;
    private javax.swing.JScrollPane informacionComplementariaDiagnosticoScrollPanel;
    private javax.swing.JLabel nombreEnfermedad;
    private javax.swing.JPanel panelDiagnostico;
    private javax.swing.JLabel textoDescriptivoVentana;
    private javax.swing.JLabel textoDiagnostico;
    private javax.swing.JLabel textoEstadoEntidad;
    private javax.swing.JLabel textoHoraYFechaEnfermedadYDiagnostico;
    private javax.swing.JLabel textoInformacionComplementariaDiagnostico;
    // End of variables declaration//GEN-END:variables
    private static EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio;
    private Object[] datosEnfermedadYDiagnosticoAmbulatorio;
    private Cie9mc cie9mcSeleccionado;
}
